/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * DescribeRabbitMQServerlessConnection response structure.
 * @class
 */
class DescribeRabbitMQServerlessConnectionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Return the number of connections.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of connection details.
         * @type {Array.<RabbitMQConnection> || null}
         */
        this.Connections = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Connections) {
            this.Connections = new Array();
            for (let z in params.Connections) {
                let obj = new RabbitMQConnection();
                obj.deserialize(params.Connections[z]);
                this.Connections.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRabbitMQServerlessPermission response structure.
 * @class
 */
class DeleteRabbitMQServerlessPermissionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Rabbitmq binding relationship list member.
 * @class
 */
class RabbitMQBindingListInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * binding id.
         * @type {number || null}
         */
        this.BindingId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Source exchange name.
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Target type. valid values: queue or exchange.
         * @type {string || null}
         */
        this.DestinationType = null;

        /**
         * Target resource name.
         * @type {string || null}
         */
        this.Destination = null;

        /**
         * Binding key.
         * @type {string || null}
         */
        this.RoutingKey = null;

        /**
         * Source exchange type.
         * @type {string || null}
         */
        this.SourceExchangeType = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Modification time
         * @type {string || null}
         */
        this.ModifyTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.BindingId = 'BindingId' in params ? params.BindingId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.DestinationType = 'DestinationType' in params ? params.DestinationType : null;
        this.Destination = 'Destination' in params ? params.Destination : null;
        this.RoutingKey = 'RoutingKey' in params ? params.RoutingKey : null;
        this.SourceExchangeType = 'SourceExchangeType' in params ? params.SourceExchangeType : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;

    }
}

/**
 * ModifyRabbitMQServerlessUser response structure.
 * @class
 */
class ModifyRabbitMQServerlessUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRabbitMQServerlessVirtualHost request structure.
 * @class
 */
class CreateRabbitMQServerlessVirtualHostRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost name
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Description information
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Message trace switch. specifies that the value "true" turns it on, "false" turns it off. indicates that it is off by default.
         * @type {boolean || null}
         */
        this.TraceFlag = null;

        /**
         * Specifies whether to create a mirrored queue policy. the default value is true.
         * @type {boolean || null}
         */
        this.MirrorQueuePolicyFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.TraceFlag = 'TraceFlag' in params ? params.TraceFlag : null;
        this.MirrorQueuePolicyFlag = 'MirrorQueuePolicyFlag' in params ? params.MirrorQueuePolicyFlag : null;

    }
}

/**
 * DescribeRabbitMQServerlessUser response structure.
 * @class
 */
class DescribeRabbitMQServerlessUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The number of returned users.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Currently created RabbitMQ list of users.
         * @type {Array.<RabbitMQUser> || null}
         */
        this.RabbitMQUserList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.RabbitMQUserList) {
            this.RabbitMQUserList = new Array();
            for (let z in params.RabbitMQUserList) {
                let obj = new RabbitMQUser();
                obj.deserialize(params.RabbitMQUserList[z]);
                this.RabbitMQUserList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRabbitMQServerlessExchange response structure.
 * @class
 */
class ModifyRabbitMQServerlessExchangeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * exchange name.
         * @type {string || null}
         */
        this.ExchangeName = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRabbitMQServerlessConsumers response structure.
 * @class
 */
class DescribeRabbitMQServerlessConsumersResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Consumer list information.
         * @type {Array.<RabbitMQConsumersListInfo> || null}
         */
        this.ConsumerInfoList = null;

        /**
         * Quantity
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ConsumerInfoList) {
            this.ConsumerInfoList = new Array();
            for (let z in params.ConsumerInfoList) {
                let obj = new RabbitMQConsumersListInfo();
                obj.deserialize(params.ConsumerInfoList[z]);
                this.ConsumerInfoList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRabbitMQServerlessQueueDetail response structure.
 * @class
 */
class DescribeRabbitMQServerlessQueueDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * Specifies the queue type. the valid values are classic or quorum.
         * @type {string || null}
         */
        this.QueueType = null;

        /**
         * Number of online consumers.
         * @type {number || null}
         */
        this.Consumers = null;

        /**
         * Durable flag.
         * @type {boolean || null}
         */
        this.Durable = null;

        /**
         * Automatic cleanup.
         * @type {boolean || null}
         */
        this.AutoDelete = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * MessageTTL parameter, dedicated for classic type.
         * @type {number || null}
         */
        this.MessageTTL = null;

        /**
         * AutoExpire parameter.
         * @type {number || null}
         */
        this.AutoExpire = null;

        /**
         * MaxLength parameter.
         * @type {number || null}
         */
        this.MaxLength = null;

        /**
         * MaxLengthBytes parameter.
         * @type {number || null}
         */
        this.MaxLengthBytes = null;

        /**
         * DeliveryLimit parameter. specifies the parameter dedicated to the quorum type.
         * @type {number || null}
         */
        this.DeliveryLimit = null;

        /**
         * OverflowBehaviour parameter specifies a value of drop-head, reject-publish, or reject-publish-dlx.
         * @type {string || null}
         */
        this.OverflowBehaviour = null;

        /**
         * DeadLetterExchange parameter.
         * @type {string || null}
         */
        this.DeadLetterExchange = null;

        /**
         * The DeadLetterRoutingKey parameter.
         * @type {string || null}
         */
        this.DeadLetterRoutingKey = null;

        /**
         * SingleActiveConsumer parameter.
         * @type {boolean || null}
         */
        this.SingleActiveConsumer = null;

        /**
         * MaximumPriority parameter. specifies that it is dedicated for the classic type.
         * @type {number || null}
         */
        this.MaximumPriority = null;

        /**
         * LazyMode parameter, dedicated for classic type.
         * @type {boolean || null}
         */
        this.LazyMode = null;

        /**
         * MasterLocator parameter, dedicated for classic type.
         * @type {string || null}
         */
        this.MasterLocator = null;

        /**
         * MaxInMemoryLength parameter, dedicated for quorum type.
         * @type {number || null}
         */
        this.MaxInMemoryLength = null;

        /**
         * The MaxInMemoryBytes parameter is dedicated to the quorum type.
         * @type {number || null}
         */
        this.MaxInMemoryBytes = null;

        /**
         * Create timestamp, in seconds.
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Node.
         * @type {string || null}
         */
        this.Node = null;

        /**
         * Arbitration queue dead letter consistency policy.
         * @type {string || null}
         */
        this.DeadLetterStrategy = null;

        /**
         * Leadership election policy for arbitration queue.
         * @type {string || null}
         */
        this.QueueLeaderLocator = null;

        /**
         * Specifies the initial replica group size of the arbitration queue.
         * @type {number || null}
         */
        this.QuorumInitialGroupSize = null;

        /**
         * Whether it is an exclusive queue.
         * @type {boolean || null}
         */
        this.Exclusive = null;

        /**
         * The name of the policy that takes effect.
         * @type {string || null}
         */
        this.Policy = null;

        /**
         * Additional parameters key-value.
         * @type {string || null}
         */
        this.Arguments = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.QueueType = 'QueueType' in params ? params.QueueType : null;
        this.Consumers = 'Consumers' in params ? params.Consumers : null;
        this.Durable = 'Durable' in params ? params.Durable : null;
        this.AutoDelete = 'AutoDelete' in params ? params.AutoDelete : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.MessageTTL = 'MessageTTL' in params ? params.MessageTTL : null;
        this.AutoExpire = 'AutoExpire' in params ? params.AutoExpire : null;
        this.MaxLength = 'MaxLength' in params ? params.MaxLength : null;
        this.MaxLengthBytes = 'MaxLengthBytes' in params ? params.MaxLengthBytes : null;
        this.DeliveryLimit = 'DeliveryLimit' in params ? params.DeliveryLimit : null;
        this.OverflowBehaviour = 'OverflowBehaviour' in params ? params.OverflowBehaviour : null;
        this.DeadLetterExchange = 'DeadLetterExchange' in params ? params.DeadLetterExchange : null;
        this.DeadLetterRoutingKey = 'DeadLetterRoutingKey' in params ? params.DeadLetterRoutingKey : null;
        this.SingleActiveConsumer = 'SingleActiveConsumer' in params ? params.SingleActiveConsumer : null;
        this.MaximumPriority = 'MaximumPriority' in params ? params.MaximumPriority : null;
        this.LazyMode = 'LazyMode' in params ? params.LazyMode : null;
        this.MasterLocator = 'MasterLocator' in params ? params.MasterLocator : null;
        this.MaxInMemoryLength = 'MaxInMemoryLength' in params ? params.MaxInMemoryLength : null;
        this.MaxInMemoryBytes = 'MaxInMemoryBytes' in params ? params.MaxInMemoryBytes : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.Node = 'Node' in params ? params.Node : null;
        this.DeadLetterStrategy = 'DeadLetterStrategy' in params ? params.DeadLetterStrategy : null;
        this.QueueLeaderLocator = 'QueueLeaderLocator' in params ? params.QueueLeaderLocator : null;
        this.QuorumInitialGroupSize = 'QuorumInitialGroupSize' in params ? params.QuorumInitialGroupSize : null;
        this.Exclusive = 'Exclusive' in params ? params.Exclusive : null;
        this.Policy = 'Policy' in params ? params.Policy : null;
        this.Arguments = 'Arguments' in params ? params.Arguments : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRabbitMQServerlessVirtualHost request structure.
 * @class
 */
class DescribeRabbitMQServerlessVirtualHostRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the vhost name. if it is not provided, query all.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Pagination offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination limit
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * search-virtual-host: specifies fuzzy name search of vhost names. earlier, it supported both prefix and suffix matching.
         * @type {Filter || null}
         */
        this.Filters = null;

        /**
         * Sorting field.
MessageHeapCount specifies the number of message backlogs.
MessageRateInOut specifies the total production and consumption rate.
MessageRateIn specifies the production rate.
MessageRateOut specifies the consumption rate.
         * @type {string || null}
         */
        this.SortElement = null;

        /**
         * Sort order. valid values: ascend or descend.
         * @type {string || null}
         */
        this.SortOrder = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            let obj = new Filter();
            obj.deserialize(params.Filters)
            this.Filters = obj;
        }
        this.SortElement = 'SortElement' in params ? params.SortElement : null;
        this.SortOrder = 'SortOrder' in params ? params.SortOrder : null;

    }
}

/**
 * ModifyRabbitMQServerlessVirtualHost request structure.
 * @class
 */
class ModifyRabbitMQServerlessVirtualHostRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the vhost name.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Specifies the description information of the vhost.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Message trace switch. specifies that the value true turns on the switch and the value false turns it off.
         * @type {boolean || null}
         */
        this.TraceFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.TraceFlag = 'TraceFlag' in params ? params.TraceFlag : null;

    }
}

/**
 * CreateRabbitMQServerlessUser response structure.
 * @class
 */
class CreateRabbitMQServerlessUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the username used when logging in.
         * @type {string || null}
         */
        this.User = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.User = 'User' in params ? params.User : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRabbitMQServerlessQueue request structure.
 * @class
 */
class DeleteRabbitMQServerlessQueueRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;

    }
}

/**
 * ListRabbitMQServerlessInstances response structure.
 * @class
 */
class ListRabbitMQServerlessInstancesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance list
         * @type {Array.<RabbitMQServerlessInstance> || null}
         */
        this.Instances = null;

        /**
         * Total number.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Instances) {
            this.Instances = new Array();
            for (let z in params.Instances) {
                let obj = new RabbitMQServerlessInstance();
                obj.deserialize(params.Instances[z]);
                this.Instances.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRabbitMQServerlessUser request structure.
 * @class
 */
class CreateRabbitMQServerlessUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username used when logging in.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Password. specifies the password used when logging in.
         * @type {string || null}
         */
        this.Password = null;

        /**
         * Description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * The serverless instance field is invalid.
         * @type {Array.<string> || null}
         */
        this.Tags = null;

        /**
         * Specifies the maximum number of connections for this user. if not specified, there is no limit.
         * @type {number || null}
         */
        this.MaxConnections = null;

        /**
         * Specifies the maximum number of channels for the user. if not specified, there is no limit.
         * @type {number || null}
         */
        this.MaxChannels = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.User = 'User' in params ? params.User : null;
        this.Password = 'Password' in params ? params.Password : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Tags = 'Tags' in params ? params.Tags : null;
        this.MaxConnections = 'MaxConnections' in params ? params.MaxConnections : null;
        this.MaxChannels = 'MaxChannels' in params ? params.MaxChannels : null;

    }
}

/**
 * ModifyRabbitMQServerlessUser request structure.
 * @class
 */
class ModifyRabbitMQServerlessUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Password. specifies the password.
         * @type {string || null}
         */
        this.Password = null;

        /**
         * Description. if not provided, no modification will be made.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * User tag. specifies to determine the access permission scope of this user to RabbitMQ Management. if it is not passed in, no modification will be made.
         * @type {Array.<string> || null}
         */
        this.Tags = null;

        /**
         * Specifies the maximum number of connections for this user. if not provided, it will not be modified.
         * @type {number || null}
         */
        this.MaxConnections = null;

        /**
         * Specifies the maximum number of channels for this user. if not provided, it will not be modified.
         * @type {number || null}
         */
        this.MaxChannels = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.User = 'User' in params ? params.User : null;
        this.Password = 'Password' in params ? params.Password : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Tags = 'Tags' in params ? params.Tags : null;
        this.MaxConnections = 'MaxConnections' in params ? params.MaxConnections : null;
        this.MaxChannels = 'MaxChannels' in params ? params.MaxChannels : null;

    }
}

/**
 * DeleteRabbitMQServerlessPermission request structure.
 * @class
 */
class DeleteRabbitMQServerlessPermissionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username used when logging in.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Specifies the vhost name.
         * @type {string || null}
         */
        this.VirtualHost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.User = 'User' in params ? params.User : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;

    }
}

/**
 * CreateRabbitMQServerlessVirtualHost response structure.
 * @class
 */
class CreateRabbitMQServerlessVirtualHostResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Vhost name
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRabbitMQServerlessInstance request structure.
 * @class
 */
class ModifyRabbitMQServerlessInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Cluster name.
         * @type {string || null}
         */
        this.ClusterName = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Whether trace is enabled.
         * @type {boolean || null}
         */
        this.TraceFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ClusterName = 'ClusterName' in params ? params.ClusterName : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.TraceFlag = 'TraceFlag' in params ? params.TraceFlag : null;

    }
}

/**
 * TDMQ for rabbitmq serverless instance.
 * @class
 */
class RabbitMQServerlessInstance extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance version.
         * @type {string || null}
         */
        this.InstanceVersion = null;

        /**
         * Instance status. 0 indicates creating in progress. 1 indicates normal. 2 indicates isolated. 3 indicates terminated. 4 indicates exception. 5 indicates delivery failed.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * MaxTPS
         * @type {number || null}
         */
        this.MaxTps = null;

        /**
         * MaxBandwidth
         * @type {number || null}
         */
        this.MaxBandWidth = null;

        /**
         * Expiration time of the cluster.
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * Auto-renewal flag. 0 indicates the default status (If the default status is not configured, manual renewal is enabled), 1 indicates auto-renewal, and 2 indicates explicitly no auto-renewal (configured by the user).
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

        /**
         * 0: Postpaid, 1: Prepaid
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Cluster specifications
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Exception information.
         * @type {string || null}
         */
        this.ExceptionInformation = null;

        /**
         * Public network access point.
         * @type {string || null}
         */
        this.PublicAccessEndpoint = null;

        /**
         * The virtual private cloud (vpc) network access point.
         * @type {Array.<RabbitMQServerlessEndpoint> || null}
         */
        this.Vpcs = null;

        /**
         * Instance status. 0 indicates creating in progress. 1 indicates normal. 2 indicates isolated. 3 indicates terminated. 4 indicates exception. 5 indicates delivery failed.

         * @type {number || null}
         */
        this.ClusterStatus = null;

        /**
         * Specifies the cluster type: 1.
         * @type {number || null}
         */
        this.InstanceType = null;

        /**
         * Expiration time
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * For compatibility with the managed version, the fixed value is 0.
         * @type {number || null}
         */
        this.NodeCount = null;

        /**
         * For compatibility with the managed version, the fixed value is 0.
         * @type {number || null}
         */
        this.MaxStorage = null;

        /**
         * Isolation time
         * @type {number || null}
         */
        this.IsolatedTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.InstanceVersion = 'InstanceVersion' in params ? params.InstanceVersion : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.MaxTps = 'MaxTps' in params ? params.MaxTps : null;
        this.MaxBandWidth = 'MaxBandWidth' in params ? params.MaxBandWidth : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.ExceptionInformation = 'ExceptionInformation' in params ? params.ExceptionInformation : null;
        this.PublicAccessEndpoint = 'PublicAccessEndpoint' in params ? params.PublicAccessEndpoint : null;

        if (params.Vpcs) {
            this.Vpcs = new Array();
            for (let z in params.Vpcs) {
                let obj = new RabbitMQServerlessEndpoint();
                obj.deserialize(params.Vpcs[z]);
                this.Vpcs.push(obj);
            }
        }
        this.ClusterStatus = 'ClusterStatus' in params ? params.ClusterStatus : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.NodeCount = 'NodeCount' in params ? params.NodeCount : null;
        this.MaxStorage = 'MaxStorage' in params ? params.MaxStorage : null;
        this.IsolatedTime = 'IsolatedTime' in params ? params.IsolatedTime : null;

    }
}

/**
 * DescribeRabbitMQServerlessExchanges response structure.
 * @class
 */
class DescribeRabbitMQServerlessExchangesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * exchanges list.
         * @type {Array.<RabbitMQExchangeListInfo> || null}
         */
        this.ExchangeInfoList = null;

        /**
         * Total count of exchanges.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ExchangeInfoList) {
            this.ExchangeInfoList = new Array();
            for (let z in params.ExchangeInfoList) {
                let obj = new RabbitMQExchangeListInfo();
                obj.deserialize(params.ExchangeInfoList[z]);
                this.ExchangeInfoList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRabbitMQServerlessVirtualHost response structure.
 * @class
 */
class DeleteRabbitMQServerlessVirtualHostResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RabbitMQ user info detail.
 * @class
 */
class RabbitMQUser extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username used when logging in.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Password. specifies the password used when logging in.
         * @type {string || null}
         */
        this.Password = null;

        /**
         * User description
         * @type {string || null}
         */
        this.Description = null;

        /**
         * User tag. specifies to determine the access permission scope of this user to RabbitMQ Management.
         * @type {Array.<string> || null}
         */
        this.Tags = null;

        /**
         * User creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Last modification time of the user.
         * @type {string || null}
         */
        this.ModifyTime = null;

        /**
         * Type of User. specifies that "System" indicates System creation and "User" indicates User-created.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Specifies the maximum number of connections allowed for this user.
         * @type {number || null}
         */
        this.MaxConnections = null;

        /**
         * The maximum number of channels allowed for this user.
         * @type {number || null}
         */
        this.MaxChannels = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.User = 'User' in params ? params.User : null;
        this.Password = 'Password' in params ? params.Password : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Tags = 'Tags' in params ? params.Tags : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.MaxConnections = 'MaxConnections' in params ? params.MaxConnections : null;
        this.MaxChannels = 'MaxChannels' in params ? params.MaxChannels : null;

    }
}

/**
 * Public network access information.
 * @class
 */
class RabbitMQServerlessAccessInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Public network domain.
         * @type {string || null}
         */
        this.PublicAccessEndpoint = null;

        /**
         * Public network status.
         * @type {string || null}
         */
        this.PublicDataStreamStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PublicAccessEndpoint = 'PublicAccessEndpoint' in params ? params.PublicAccessEndpoint : null;
        this.PublicDataStreamStatus = 'PublicDataStreamStatus' in params ? params.PublicDataStreamStatus : null;

    }
}

/**
 * RabbitMQ permission details.
 * @class
 */
class RabbitMQPermission extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username, which is the user associated with the permission.
         * @type {string || null}
         */
        this.User = null;

        /**
         * vhost name.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Types of permissions. declare related operations. for the user, it is operable to perform operations on the resource name under the vhost that matches the regular expression.
         * @type {string || null}
         */
        this.ConfigRegexp = null;

        /**
         * Types of permissions. message write related operations. the user can operate on the resource names under the vhost that match the regular expression.
         * @type {string || null}
         */
        this.WriteRegexp = null;

        /**
         * Types of permissions. message read related operations. the user can operate on the resource name under the vhost that matches the regular expression.
         * @type {string || null}
         */
        this.ReadRegexp = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Modification time
         * @type {string || null}
         */
        this.ModifyTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.User = 'User' in params ? params.User : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.ConfigRegexp = 'ConfigRegexp' in params ? params.ConfigRegexp : null;
        this.WriteRegexp = 'WriteRegexp' in params ? params.WriteRegexp : null;
        this.ReadRegexp = 'ReadRegexp' in params ? params.ReadRegexp : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;

    }
}

/**
 * Specifies the queue usage quota information.
 * @class
 */
class QueueQuota extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the maximum number of queues that can be created.
         * @type {number || null}
         */
        this.MaxQueue = null;

        /**
         * Number of queues created.
         * @type {number || null}
         */
        this.UsedQueue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MaxQueue = 'MaxQueue' in params ? params.MaxQueue : null;
        this.UsedQueue = 'UsedQueue' in params ? params.UsedQueue : null;

    }
}

/**
 * DescribeRabbitMQServerlessVirtualHost response structure.
 * @class
 */
class DescribeRabbitMQServerlessVirtualHostResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Return the number of vhosts.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Specifies the list of details of the vhost.
         * @type {Array.<RabbitMQVirtualHostInfo> || null}
         */
        this.VirtualHostList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.VirtualHostList) {
            this.VirtualHostList = new Array();
            for (let z in params.VirtualHostList) {
                let obj = new RabbitMQVirtualHostInfo();
                obj.deserialize(params.VirtualHostList[z]);
                this.VirtualHostList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRabbitMQServerlessQueues response structure.
 * @class
 */
class DescribeRabbitMQServerlessQueuesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queue list information.
         * @type {Array.<RabbitMQQueueListInfo> || null}
         */
        this.QueueInfoList = null;

        /**
         * Quantity
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.QueueInfoList) {
            this.QueueInfoList = new Array();
            for (let z in params.QueueInfoList) {
                let obj = new RabbitMQQueueListInfo();
                obj.deserialize(params.QueueInfoList[z]);
                this.QueueInfoList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRabbitMQServerlessInstance response structure.
 * @class
 */
class ModifyRabbitMQServerlessInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyRabbitMQServerlessVirtualHost response structure.
 * @class
 */
class ModifyRabbitMQServerlessVirtualHostResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRabbitMQServerlessExchange request structure.
 * @class
 */
class CreateRabbitMQServerlessExchangeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * VHost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * exchange name.
         * @type {string || null}
         */
        this.ExchangeName = null;

        /**
         * Specifies the exchange type. valid values: "fanout", "direct", "topic", "headers".
         * @type {string || null}
         */
        this.ExchangeType = null;

        /**
         * Specifies the remark for exchange.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Specifies whether it is a persistent exchange. when the cluster restarts, all exchanges with this field set to "false" will be cleared.
         * @type {boolean || null}
         */
        this.Durable = null;

        /**
         * Whether to auto-delete this exchange. if set to "true", the exchange will be automatically deleted when all routing relationships on the current exchange are unbound.
         * @type {boolean || null}
         */
        this.AutoDelete = null;

        /**
         * Specifies whether it is an internal exchange. if set to "true", messages cannot be directly delivered to this exchange. they need to be forwarded through another exchange in the routing settings.
         * @type {boolean || null}
         */
        this.Internal = null;

        /**
         * Alternative exchange. if a message cannot be sent to the current exchange, it will be sent to this alternative exchange.
         * @type {string || null}
         */
        this.AlternateExchange = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;
        this.ExchangeType = 'ExchangeType' in params ? params.ExchangeType : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.Durable = 'Durable' in params ? params.Durable : null;
        this.AutoDelete = 'AutoDelete' in params ? params.AutoDelete : null;
        this.Internal = 'Internal' in params ? params.Internal : null;
        this.AlternateExchange = 'AlternateExchange' in params ? params.AlternateExchange : null;

    }
}

/**
 * DescribeRabbitMQServerlessConnection request structure.
 * @class
 */
class DescribeRabbitMQServerlessConnectionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID		
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the vhost name.
         * @type {string || null}
         */
        this.VirtualHost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;

    }
}

/**
 * DescribeRabbitMQServerlessUser request structure.
 * @class
 */
class DescribeRabbitMQServerlessUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Retrieves usernames. supports prefix match and suffix matching.
         * @type {string || null}
         */
        this.SearchUser = null;

        /**
         * Pagination offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination limit
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Specifies the username for an exact query.
         * @type {string || null}
         */
        this.User = null;

        /**
         * User tag. filters by Tag filter list.
         * @type {Array.<string> || null}
         */
        this.Tags = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.SearchUser = 'SearchUser' in params ? params.SearchUser : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.User = 'User' in params ? params.User : null;
        this.Tags = 'Tags' in params ? params.Tags : null;

    }
}

/**
 * DeleteRabbitMQServerlessUser response structure.
 * @class
 */
class DeleteRabbitMQServerlessUserResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RabbitMQ cluster basic information.
 * @class
 */
class RabbitMQClusterInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.ClusterId = null;

        /**
         * Cluster name.
         * @type {string || null}
         */
        this.ClusterName = null;

        /**
         * Region information
         * @type {string || null}
         */
        this.Region = null;

        /**
         * Creation time, in milliseconds
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Cluster description remark information
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * VPC and network information.
         * @type {Array.<VpcEndpointInfo> || null}
         */
        this.Vpcs = null;

        /**
         * Availability zone information
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

        /**
         * number of virtual hosts.
         * @type {number || null}
         */
        this.VirtualHostNumber = null;

        /**
         * Number of queues
         * @type {number || null}
         */
        this.QueueNumber = null;

        /**
         * Number of messages produced per second (measurement unit: messages/second).
         * @type {number || null}
         */
        this.MessagePublishRate = null;

        /**
         * Number of accumulated messages. valid values: pieces.
         * @type {number || null}
         */
        this.MessageStackNumber = null;

        /**
         * Expiration time
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * number of channels.
         * @type {number || null}
         */
        this.ChannelNumber = null;

        /**
         * number of connections.
         * @type {number || null}
         */
        this.ConnectionNumber = null;

        /**
         * Number of consumers.
         * @type {number || null}
         */
        this.ConsumerNumber = null;

        /**
         * Number of Exchanges.
         * @type {number || null}
         */
        this.ExchangeNumber = null;

        /**
         * Cluster exception information.
         * @type {string || null}
         */
        this.ExceptionInformation = null;

        /**
         * Instance status. 0 indicates creating in progress. 1 indicates normal. 2 indicates isolated. 3 indicates terminated. 4 indicates exception. 5 indicates delivery failed.
         * @type {number || null}
         */
        this.ClusterStatus = null;

        /**
         * Auto-renewal flag. 0 indicates the default status (If the default status is not configured, manual renewal is enabled), 1 indicates auto-renewal, and 2 indicates explicitly no auto-renewal (configured by the user).
         * @type {number || null}
         */
        this.AutoRenewFlag = null;

        /**
         * Whether the mirrored queue strategy is enabled. 1 indicates enabled, and 0 indicates not enabled.
         * @type {number || null}
         */
        this.MirrorQueuePolicyFlag = null;

        /**
         * Number of messages consumed per second (measurement unit: messages/second).
         * @type {number || null}
         */
        this.MessageConsumeRate = null;

        /**
         * Specifies the cluster version information.
         * @type {string || null}
         */
        this.ClusterVersion = null;

        /**
         * Billing mode. valid values: 0 (postpaid), 1 (prepaid).
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Specifies the cluster type.
         * @type {number || null}
         */
        this.InstanceType = null;

        /**
         * Specifies the message retention time, in hours.
         * @type {number || null}
         */
        this.MessageRetainTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.ClusterName = 'ClusterName' in params ? params.ClusterName : null;
        this.Region = 'Region' in params ? params.Region : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

        if (params.Vpcs) {
            this.Vpcs = new Array();
            for (let z in params.Vpcs) {
                let obj = new VpcEndpointInfo();
                obj.deserialize(params.Vpcs[z]);
                this.Vpcs.push(obj);
            }
        }
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;
        this.VirtualHostNumber = 'VirtualHostNumber' in params ? params.VirtualHostNumber : null;
        this.QueueNumber = 'QueueNumber' in params ? params.QueueNumber : null;
        this.MessagePublishRate = 'MessagePublishRate' in params ? params.MessagePublishRate : null;
        this.MessageStackNumber = 'MessageStackNumber' in params ? params.MessageStackNumber : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.ChannelNumber = 'ChannelNumber' in params ? params.ChannelNumber : null;
        this.ConnectionNumber = 'ConnectionNumber' in params ? params.ConnectionNumber : null;
        this.ConsumerNumber = 'ConsumerNumber' in params ? params.ConsumerNumber : null;
        this.ExchangeNumber = 'ExchangeNumber' in params ? params.ExchangeNumber : null;
        this.ExceptionInformation = 'ExceptionInformation' in params ? params.ExceptionInformation : null;
        this.ClusterStatus = 'ClusterStatus' in params ? params.ClusterStatus : null;
        this.AutoRenewFlag = 'AutoRenewFlag' in params ? params.AutoRenewFlag : null;
        this.MirrorQueuePolicyFlag = 'MirrorQueuePolicyFlag' in params ? params.MirrorQueuePolicyFlag : null;
        this.MessageConsumeRate = 'MessageConsumeRate' in params ? params.MessageConsumeRate : null;
        this.ClusterVersion = 'ClusterVersion' in params ? params.ClusterVersion : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.MessageRetainTime = 'MessageRetainTime' in params ? params.MessageRetainTime : null;

    }
}

/**
 * DescribeRabbitMQServerlessBindings response structure.
 * @class
 */
class DescribeRabbitMQServerlessBindingsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Route relationship list
         * @type {Array.<RabbitMQBindingListInfo> || null}
         */
        this.BindingInfoList = null;

        /**
         * Quantity
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.BindingInfoList) {
            this.BindingInfoList = new Array();
            for (let z in params.BindingInfoList) {
                let obj = new RabbitMQBindingListInfo();
                obj.deserialize(params.BindingInfoList[z]);
                this.BindingInfoList.push(obj);
            }
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRabbitMQServerlessExchange response structure.
 * @class
 */
class CreateRabbitMQServerlessExchangeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * exchange name.
         * @type {string || null}
         */
        this.ExchangeName = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRabbitMQServerlessExchange response structure.
 * @class
 */
class DeleteRabbitMQServerlessExchangeResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * exchange name.
         * @type {string || null}
         */
        this.ExchangeName = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRabbitMQServerlessUser request structure.
 * @class
 */
class DeleteRabbitMQServerlessUserRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username used when logging in.
         * @type {string || null}
         */
        this.User = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.User = 'User' in params ? params.User : null;

    }
}

/**
 * DescribeRabbitMQServerlessConsumers request structure.
 * @class
 */
class DescribeRabbitMQServerlessConsumersRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * Pagination limit
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Pagination offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Search keywords
         * @type {string || null}
         */
        this.SearchWord = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;

    }
}

/**
 * Queue consumer list information.
 * @class
 */
class RabbitMQConsumersListInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Client Ip.
         * @type {string || null}
         */
        this.ClientIp = null;

        /**
         * Consumer Tag.
         * @type {string || null}
         */
        this.ConsumerTag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClientIp = 'ClientIp' in params ? params.ClientIp : null;
        this.ConsumerTag = 'ConsumerTag' in params ? params.ConsumerTag : null;

    }
}

/**
 * CreateRabbitMQServerlessBinding response structure.
 * @class
 */
class CreateRabbitMQServerlessBindingResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queue name.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * binding Id.
         * @type {number || null}
         */
        this.BindingId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.BindingId = 'BindingId' in params ? params.BindingId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Number of users quota.
 * @class
 */
class UserQuota extends  AbstractModel {
    constructor(){
        super();

        /**
         * Maximum number of users.
         * @type {number || null}
         */
        this.MaxUser = null;

        /**
         * Used number of users.
         * @type {number || null}
         */
        this.UsedUser = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MaxUser = 'MaxUser' in params ? params.MaxUser : null;
        this.UsedUser = 'UsedUser' in params ? params.UsedUser : null;

    }
}

/**
 * ModifyRabbitMQServerlessPermission request structure.
 * @class
 */
class ModifyRabbitMQServerlessPermissionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username, which is the user associated with the permission.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Specifies the vhost name.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Types of permissions. declare related operations. for the user, it is operable to perform operations on the resource name under the vhost that matches the regular expression.
         * @type {string || null}
         */
        this.ConfigRegexp = null;

        /**
         * Types of permissions. message write related operations. the user can operate on the resource names under the vhost that match the regular expression.
         * @type {string || null}
         */
        this.WriteRegexp = null;

        /**
         * Types of permissions. message read related operations. the user can operate on the resource name under the vhost that matches the regular expression.
         * @type {string || null}
         */
        this.ReadRegexp = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.User = 'User' in params ? params.User : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.ConfigRegexp = 'ConfigRegexp' in params ? params.ConfigRegexp : null;
        this.WriteRegexp = 'WriteRegexp' in params ? params.WriteRegexp : null;
        this.ReadRegexp = 'ReadRegexp' in params ? params.ReadRegexp : null;

    }
}

/**
 * CreateRabbitMQServerlessQueue request structure.
 * @class
 */
class CreateRabbitMQServerlessQueueRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * VHost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * Supports only classic.
         * @type {string || null}
         */
        this.QueueType = null;

        /**
         * Durable flag. specifies that for the classic type, it must be passed in. for the quorum type, there is no need to pass it in and it is fixed as true.
         * @type {boolean || null}
         */
        this.Durable = null;

        /**
         * Automatic cleanup. the classic type must be passed. the quorum type does not need to be passed and is fixed as false.
         * @type {boolean || null}
         */
        this.AutoDelete = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * The MessageTTL parameter specifies settings dedicated to the classic type.
         * @type {number || null}
         */
        this.MessageTTL = null;

        /**
         * The AutoExpire parameter, in milliseconds, indicates that the queue will be deleted if it is not used within a specified time.
         * @type {number || null}
         */
        this.AutoExpire = null;

        /**
         * MaxLength parameter. specifies the maximum number of entries the queue can hold. if the limit is exceeded, it will be handled according to the overview behavior.
         * @type {number || null}
         */
        this.MaxLength = null;

        /**
         * The MaxLengthBytes parameter specifies the maximum length in bytes. if the value exceeds the limit, it will be handled according to the overview behavior.
         * @type {number || null}
         */
        this.MaxLengthBytes = null;

        /**
         * DeliveryLimit parameter. specifies the parameter dedicated to the quorum type.
         * @type {number || null}
         */
        this.DeliveryLimit = null;

        /**
         * OverflowBehaviour parameter specifies a value of drop-head, reject-publish, or reject-publish-dlx.
         * @type {string || null}
         */
        this.OverflowBehaviour = null;

        /**
         * The DeadLetterExchange parameter specifies that expired or rejected messages can be routed to a designated dead letter exchange.
         * @type {string || null}
         */
        this.DeadLetterExchange = null;

        /**
         * The DeadLetterRoutingKey parameter specifies that it can only contain letters, digits, ".", "-", "@", and "_".
         * @type {string || null}
         */
        this.DeadLetterRoutingKey = null;

        /**
         * The SingleActiveConsumer parameter. if enabled, ensure that there is only one consumer consuming from the queue every time.
         * @type {boolean || null}
         */
        this.SingleActiveConsumer = null;

        /**
         * MaximumPriority parameter. specifies that it is dedicated for the classic type.
         * @type {number || null}
         */
        this.MaximumPriority = null;

        /**
         * LazyMode parameter. specifies that it is dedicated for the classic type.
         * @type {boolean || null}
         */
        this.LazyMode = null;

        /**
         * The MasterLocator parameter, dedicated to the classic type, specifies a value of min-masters, client-local, or random.
         * @type {string || null}
         */
        this.MasterLocator = null;

        /**
         * MaxInMemoryLength parameter, dedicated for quorum type. specifies the maximum number of messages in memory for quorum queues.
         * @type {number || null}
         */
        this.MaxInMemoryLength = null;

        /**
         * The MaxInMemoryBytes parameter is dedicated to the quorum type. it specifies the maximum total message size in memory for quorum queues.
         * @type {number || null}
         */
        this.MaxInMemoryBytes = null;

        /**
         * Node parameter. optional. specifies the node where the specified creation queue is located.
         * @type {string || null}
         */
        this.Node = null;

        /**
         * Consistency policy for dead-letter in arbitrating queues. specifies valid values: at-most-once, at-least-once. at-most-once is selected by default.
         * @type {string || null}
         */
        this.DeadLetterStrategy = null;

        /**
         * Specifies the leader election strategy for the arbitration queue. valid values are client-local and balanced. the default value is client-local.
         * @type {string || null}
         */
        this.QueueLeaderLocator = null;

        /**
         * Specifies the initial replica group size of the arbitration queue. the default value is 3.
         * @type {number || null}
         */
        this.QuorumInitialGroupSize = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.QueueType = 'QueueType' in params ? params.QueueType : null;
        this.Durable = 'Durable' in params ? params.Durable : null;
        this.AutoDelete = 'AutoDelete' in params ? params.AutoDelete : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.MessageTTL = 'MessageTTL' in params ? params.MessageTTL : null;
        this.AutoExpire = 'AutoExpire' in params ? params.AutoExpire : null;
        this.MaxLength = 'MaxLength' in params ? params.MaxLength : null;
        this.MaxLengthBytes = 'MaxLengthBytes' in params ? params.MaxLengthBytes : null;
        this.DeliveryLimit = 'DeliveryLimit' in params ? params.DeliveryLimit : null;
        this.OverflowBehaviour = 'OverflowBehaviour' in params ? params.OverflowBehaviour : null;
        this.DeadLetterExchange = 'DeadLetterExchange' in params ? params.DeadLetterExchange : null;
        this.DeadLetterRoutingKey = 'DeadLetterRoutingKey' in params ? params.DeadLetterRoutingKey : null;
        this.SingleActiveConsumer = 'SingleActiveConsumer' in params ? params.SingleActiveConsumer : null;
        this.MaximumPriority = 'MaximumPriority' in params ? params.MaximumPriority : null;
        this.LazyMode = 'LazyMode' in params ? params.LazyMode : null;
        this.MasterLocator = 'MasterLocator' in params ? params.MasterLocator : null;
        this.MaxInMemoryLength = 'MaxInMemoryLength' in params ? params.MaxInMemoryLength : null;
        this.MaxInMemoryBytes = 'MaxInMemoryBytes' in params ? params.MaxInMemoryBytes : null;
        this.Node = 'Node' in params ? params.Node : null;
        this.DeadLetterStrategy = 'DeadLetterStrategy' in params ? params.DeadLetterStrategy : null;
        this.QueueLeaderLocator = 'QueueLeaderLocator' in params ? params.QueueLeaderLocator : null;
        this.QuorumInitialGroupSize = 'QuorumInitialGroupSize' in params ? params.QuorumInitialGroupSize : null;

    }
}

/**
 * DeleteRabbitMQServerlessBinding request structure.
 * @class
 */
class DeleteRabbitMQServerlessBindingRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * binding relationship Id.
         * @type {number || null}
         */
        this.BindingId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.BindingId = 'BindingId' in params ? params.BindingId : null;

    }
}

/**
 * vhost overview statistical information.
 * @class
 */
class RabbitMQVirtualHostStatistics extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of queues of the current vhost.
         * @type {number || null}
         */
        this.CurrentQueues = null;

        /**
         * Number of exchanges in the current vhost.
         * @type {number || null}
         */
        this.CurrentExchanges = null;

        /**
         * Number of current connections of the vhost.
         * @type {number || null}
         */
        this.CurrentConnections = null;

        /**
         * Number of channels for the current vhost.
         * @type {number || null}
         */
        this.CurrentChannels = null;

        /**
         * Number of users of the current vhost.
         * @type {number || null}
         */
        this.CurrentUsers = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CurrentQueues = 'CurrentQueues' in params ? params.CurrentQueues : null;
        this.CurrentExchanges = 'CurrentExchanges' in params ? params.CurrentExchanges : null;
        this.CurrentConnections = 'CurrentConnections' in params ? params.CurrentConnections : null;
        this.CurrentChannels = 'CurrentChannels' in params ? params.CurrentChannels : null;
        this.CurrentUsers = 'CurrentUsers' in params ? params.CurrentUsers : null;

    }
}

/**
 * DescribeRabbitMQServerlessQueueDetail request structure.
 * @class
 */
class DescribeRabbitMQServerlessQueueDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;

    }
}

/**
 * RabbitMQ queue list member information.
 * @class
 */
class RabbitMQQueueListInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Consumer information.
         * @type {RabbitMQQueueListConsumerDetailInfo || null}
         */
        this.ConsumerDetail = null;

        /**
         * Specifies the queue type. the valid values are "classic" and "quorum".
         * @type {string || null}
         */
        this.QueueType = null;

        /**
         * Number of message backlogs.
         * @type {number || null}
         */
        this.MessageHeapCount = null;

        /**
         * Message production rate per second.
         * @type {number || null}
         */
        this.MessageRateIn = null;

        /**
         * Message consumption rate per second.
         * @type {number || null}
         */
        this.MessageRateOut = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Modification time
         * @type {string || null}
         */
        this.ModifyTime = null;

        /**
         * Specifies whether the queue is persistent. true indicates persistent, and false indicates non-persistent.
         * @type {boolean || null}
         */
        this.Durable = null;

        /**
         * Specifies whether the queue is an auto-delete queue. true indicates auto-delete, and false indicates non-auto-delete.
         * @type {boolean || null}
         */
        this.AutoDelete = null;

        /**
         * instanceId to which the queue belongs.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Name of the virtual host to which the queue belongs.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Specifies the name of the primary node where the queue is located.
         * @type {string || null}
         */
        this.Node = null;

        /**
         * The name of the effective policy.
         * @type {string || null}
         */
        this.Policy = null;

        /**
         * Additional parameters key-value objects.
         * @type {string || null}
         */
        this.Arguments = null;

        /**
         * Whether it is an exclusive queue.
         * @type {boolean || null}
         */
        this.Exclusive = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

        if (params.ConsumerDetail) {
            let obj = new RabbitMQQueueListConsumerDetailInfo();
            obj.deserialize(params.ConsumerDetail)
            this.ConsumerDetail = obj;
        }
        this.QueueType = 'QueueType' in params ? params.QueueType : null;
        this.MessageHeapCount = 'MessageHeapCount' in params ? params.MessageHeapCount : null;
        this.MessageRateIn = 'MessageRateIn' in params ? params.MessageRateIn : null;
        this.MessageRateOut = 'MessageRateOut' in params ? params.MessageRateOut : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;
        this.Durable = 'Durable' in params ? params.Durable : null;
        this.AutoDelete = 'AutoDelete' in params ? params.AutoDelete : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Node = 'Node' in params ? params.Node : null;
        this.Policy = 'Policy' in params ? params.Policy : null;
        this.Arguments = 'Arguments' in params ? params.Arguments : null;
        this.Exclusive = 'Exclusive' in params ? params.Exclusive : null;

    }
}

/**
 * Filter parameter
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Value.
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * ModifyRabbitMQServerlessPermission response structure.
 * @class
 */
class ModifyRabbitMQServerlessPermissionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRabbitMQServerlessExchange request structure.
 * @class
 */
class DeleteRabbitMQServerlessExchangeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * exchange name.
         * @type {string || null}
         */
        this.ExchangeName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;

    }
}

/**
 * DescribeRabbitMQServerlessExchangeDetail request structure.
 * @class
 */
class DescribeRabbitMQServerlessExchangeDetailRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * exchange name.
         * @type {string || null}
         */
        this.ExchangeName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;

    }
}

/**
 * RabbitMQ cluster specification information.
 * @class
 */
class RabbitMQClusterSpecInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the cluster specification name.
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Max tps.
         * @type {number || null}
         */
        this.MaxTps = null;

        /**
         * Maximum number of queues.
         * @type {number || null}
         */
        this.MaxQueueNum = null;

        /**
         * Maximum number of exchanges.
         * @type {number || null}
         */
        this.MaxExchangeNum = null;

        /**
         * Maximum number of vhosts.
         * @type {number || null}
         */
        this.MaxVhostNum = null;

        /**
         * Maximum number of connections.
         * @type {number || null}
         */
        this.MaxConnNum = null;

        /**
         * Maximum number of users.
         * @type {number || null}
         */
        this.MaxUserNum = null;

        /**
         * Peak bandwidth. abandoned.
         * @type {number || null}
         */
        this.MaxBandWidth = null;

        /**
         * Public network bandwidth. abandoned.
         * @type {number || null}
         */
        this.PublicNetworkTps = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.MaxTps = 'MaxTps' in params ? params.MaxTps : null;
        this.MaxQueueNum = 'MaxQueueNum' in params ? params.MaxQueueNum : null;
        this.MaxExchangeNum = 'MaxExchangeNum' in params ? params.MaxExchangeNum : null;
        this.MaxVhostNum = 'MaxVhostNum' in params ? params.MaxVhostNum : null;
        this.MaxConnNum = 'MaxConnNum' in params ? params.MaxConnNum : null;
        this.MaxUserNum = 'MaxUserNum' in params ? params.MaxUserNum : null;
        this.MaxBandWidth = 'MaxBandWidth' in params ? params.MaxBandWidth : null;
        this.PublicNetworkTps = 'PublicNetworkTps' in params ? params.PublicNetworkTps : null;

    }
}

/**
 * ModifyRabbitMQServerlessQueue response structure.
 * @class
 */
class ModifyRabbitMQServerlessQueueResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRabbitMQServerlessBinding request structure.
 * @class
 */
class CreateRabbitMQServerlessBindingRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Source exchange.
         * @type {string || null}
         */
        this.Source = null;

        /**
         * Target type. valid values: queue or exchange.
         * @type {string || null}
         */
        this.DestinationType = null;

        /**
         * Target queue or exchange.
         * @type {string || null}
         */
        this.Destination = null;

        /**
         * Binding key.
         * @type {string || null}
         */
        this.RoutingKey = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.DestinationType = 'DestinationType' in params ? params.DestinationType : null;
        this.Destination = 'Destination' in params ? params.Destination : null;
        this.RoutingKey = 'RoutingKey' in params ? params.RoutingKey : null;

    }
}

/**
 * Access point.
 * @class
 */
class RabbitMQServerlessEndpoint extends  AbstractModel {
    constructor(){
        super();

        /**
         * vpc id
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * subnet id
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Access address
         * @type {string || null}
         */
        this.VpcEndpoint = null;

        /**
         * Access address status.
         * @type {string || null}
         */
        this.VpcDataStreamEndpointStatus = null;

        /**
         * Whether it is a public network.
         * @type {boolean || null}
         */
        this.PublicNetwork = null;

        /**
         * Specifies the access policy.
         * @type {string || null}
         */
        this.AccessStrategy = null;

        /**
         * Bandwidth
         * @type {number || null}
         */
        this.Bandwidth = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.VpcEndpoint = 'VpcEndpoint' in params ? params.VpcEndpoint : null;
        this.VpcDataStreamEndpointStatus = 'VpcDataStreamEndpointStatus' in params ? params.VpcDataStreamEndpointStatus : null;
        this.PublicNetwork = 'PublicNetwork' in params ? params.PublicNetwork : null;
        this.AccessStrategy = 'AccessStrategy' in params ? params.AccessStrategy : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;

    }
}

/**
 * RabbitMQ vhost detail.
 * @class
 */
class RabbitMQVirtualHostInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost name.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Specifies the description information of the vhost.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Specifies the Tag of the vhost.
         * @type {Array.<string> || null}
         */
        this.Tags = null;

        /**
         * Creation time
         * @type {string || null}
         */
        this.CreateTime = null;

        /**
         * Modification time
         * @type {string || null}
         */
        this.ModifyTime = null;

        /**
         * Specifies the overview statistics information of the vhost.
         * @type {RabbitMQVirtualHostStatistics || null}
         */
        this.VirtualHostStatistics = null;

        /**
         * vhost status. specifies the status that corresponds to the native console and can be running, partial, stopped, or unknown.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Specifies the number of message backlogs.
         * @type {number || null}
         */
        this.MessageHeapCount = null;

        /**
         * Input message rate.
         * @type {number || null}
         */
        this.MessageRateIn = null;

        /**
         * Output message rate.
         * @type {number || null}
         */
        this.MessageRateOut = null;

        /**
         * Specifies whether a mirrored queue policy exists. true indicates existence, and false indicates non-existence.
         * @type {boolean || null}
         */
        this.MirrorQueuePolicyFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Tags = 'Tags' in params ? params.Tags : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ModifyTime = 'ModifyTime' in params ? params.ModifyTime : null;

        if (params.VirtualHostStatistics) {
            let obj = new RabbitMQVirtualHostStatistics();
            obj.deserialize(params.VirtualHostStatistics)
            this.VirtualHostStatistics = obj;
        }
        this.Status = 'Status' in params ? params.Status : null;
        this.MessageHeapCount = 'MessageHeapCount' in params ? params.MessageHeapCount : null;
        this.MessageRateIn = 'MessageRateIn' in params ? params.MessageRateIn : null;
        this.MessageRateOut = 'MessageRateOut' in params ? params.MessageRateOut : null;
        this.MirrorQueuePolicyFlag = 'MirrorQueuePolicyFlag' in params ? params.MirrorQueuePolicyFlag : null;

    }
}

/**
 * Specifies the exchange usage quota information.
 * @class
 */
class ExchangeQuota extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the maximum number of exchanges that can be created.
         * @type {number || null}
         */
        this.MaxExchange = null;

        /**
         * Specifies the number of exchanges that have been created.
         * @type {number || null}
         */
        this.UsedExchange = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MaxExchange = 'MaxExchange' in params ? params.MaxExchange : null;
        this.UsedExchange = 'UsedExchange' in params ? params.UsedExchange : null;

    }
}

/**
 * DescribeRabbitMQServerlessInstance response structure.
 * @class
 */
class DescribeRabbitMQServerlessInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster information.
         * @type {RabbitMQClusterInfo || null}
         */
        this.ClusterInfo = null;

        /**
         * Specifies the cluster specification information.
         * @type {RabbitMQClusterSpecInfo || null}
         */
        this.ClusterSpecInfo = null;

        /**
         * Specifies the quota information of the vhost.
         * @type {VirtualHostQuota || null}
         */
        this.VirtualHostQuota = null;

        /**
         * Specifies the exchange quota information.
         * @type {ExchangeQuota || null}
         */
        this.ExchangeQuota = null;

        /**
         * Specifies the quota information of the queue.
         * @type {QueueQuota || null}
         */
        this.QueueQuota = null;

        /**
         * Network information.
         * @type {RabbitMQServerlessAccessInfo || null}
         */
        this.ClusterNetInfo = null;

        /**
         * Public network allowlist information.
         * @type {RabbitMQServerlessWhiteListInfo || null}
         */
        this.ClusterWhiteListInfo = null;

        /**
         * Specifies the quota information of the user.
         * @type {UserQuota || null}
         */
        this.UserQuota = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ClusterInfo) {
            let obj = new RabbitMQClusterInfo();
            obj.deserialize(params.ClusterInfo)
            this.ClusterInfo = obj;
        }

        if (params.ClusterSpecInfo) {
            let obj = new RabbitMQClusterSpecInfo();
            obj.deserialize(params.ClusterSpecInfo)
            this.ClusterSpecInfo = obj;
        }

        if (params.VirtualHostQuota) {
            let obj = new VirtualHostQuota();
            obj.deserialize(params.VirtualHostQuota)
            this.VirtualHostQuota = obj;
        }

        if (params.ExchangeQuota) {
            let obj = new ExchangeQuota();
            obj.deserialize(params.ExchangeQuota)
            this.ExchangeQuota = obj;
        }

        if (params.QueueQuota) {
            let obj = new QueueQuota();
            obj.deserialize(params.QueueQuota)
            this.QueueQuota = obj;
        }

        if (params.ClusterNetInfo) {
            let obj = new RabbitMQServerlessAccessInfo();
            obj.deserialize(params.ClusterNetInfo)
            this.ClusterNetInfo = obj;
        }

        if (params.ClusterWhiteListInfo) {
            let obj = new RabbitMQServerlessWhiteListInfo();
            obj.deserialize(params.ClusterWhiteListInfo)
            this.ClusterWhiteListInfo = obj;
        }

        if (params.UserQuota) {
            let obj = new UserQuota();
            obj.deserialize(params.UserQuota)
            this.UserQuota = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ListRabbitMQServerlessInstances request structure.
 * @class
 */
class ListRabbitMQServerlessInstancesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter criteria.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Page size.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Starting index value for pagination.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * RabbitMQ connection detail.
 * @class
 */
class RabbitMQConnection extends  AbstractModel {
    constructor(){
        super();

        /**
         * Connection name.
         * @type {string || null}
         */
        this.ConnectionName = null;

        /**
         * Client IP
         * @type {string || null}
         */
        this.PeerHost = null;

        /**
         * Specifies the connection status, including starting, tuning, opening, running, flow, blocking, blocked, closing, and closed.
         * @type {string || null}
         */
        this.State = null;

        /**
         * User that who has created this connection.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Whether ssl is enabled.
         * @type {boolean || null}
         */
        this.SSL = null;

        /**
         * Connection protocol.
         * @type {string || null}
         */
        this.Protocol = null;

        /**
         * Specifies the number of channels under the connection.
         * @type {number || null}
         */
        this.Channels = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConnectionName = 'ConnectionName' in params ? params.ConnectionName : null;
        this.PeerHost = 'PeerHost' in params ? params.PeerHost : null;
        this.State = 'State' in params ? params.State : null;
        this.User = 'User' in params ? params.User : null;
        this.SSL = 'SSL' in params ? params.SSL : null;
        this.Protocol = 'Protocol' in params ? params.Protocol : null;
        this.Channels = 'Channels' in params ? params.Channels : null;

    }
}

/**
 * RabbitMQ queue list consumer information response parameters structure.
 * @class
 */
class RabbitMQQueueListConsumerDetailInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of consumers.
         * @type {number || null}
         */
        this.ConsumersNumber = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConsumersNumber = 'ConsumersNumber' in params ? params.ConsumersNumber : null;

    }
}

/**
 * DescribeRabbitMQServerlessInstance request structure.
 * @class
 */
class DescribeRabbitMQServerlessInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeRabbitMQServerlessPermission request structure.
 * @class
 */
class DescribeRabbitMQServerlessPermissionRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the username for query filtering. if not provided, all will be queried.
         * @type {string || null}
         */
        this.User = null;

        /**
         * Specifies the vhost name. used for query filtering. if it is not provided, query all.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Pagination offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination limit
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.User = 'User' in params ? params.User : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeRabbitMQServerlessExchangeDetail response structure.
 * @class
 */
class DescribeRabbitMQServerlessExchangeDetailResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * exchange name.
         * @type {string || null}
         */
        this.ExchangeName = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Specifies whether it is a persistent exchange. when the cluster restarts, all exchanges with this field set to "false" will be cleared.
         * @type {boolean || null}
         */
        this.Durable = null;

        /**
         * Whether to auto-delete this exchange. if set to "true", the exchange will be automatically deleted when all routing relationships on the current exchange are unbound.
         * @type {boolean || null}
         */
        this.AutoDelete = null;

        /**
         * Specifies whether it is an internal exchange. if set to "true", messages cannot be directly delivered to this exchange. they need to be forwarded through another exchange in the routing settings.
         * @type {boolean || null}
         */
        this.Internal = null;

        /**
         * Alternative exchange. if a message does not match all queues or exchanges bound to the current exchange, it will be sent to this alternative exchange.
         * @type {string || null}
         */
        this.AlternateExchange = null;

        /**
         * Specifies the exchange type. valid values: "fanout", "direct", "topic", "headers".
         * @type {string || null}
         */
        this.ExchangeType = null;

        /**
         * VHost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * exchange creator. valid values: `system` (generated by the system), `user` (user-created).
         * @type {string || null}
         */
        this.ExchangeCreator = null;

        /**
         * Additional parameters key-value string.
         * @type {string || null}
         */
        this.Arguments = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.Durable = 'Durable' in params ? params.Durable : null;
        this.AutoDelete = 'AutoDelete' in params ? params.AutoDelete : null;
        this.Internal = 'Internal' in params ? params.Internal : null;
        this.AlternateExchange = 'AlternateExchange' in params ? params.AlternateExchange : null;
        this.ExchangeType = 'ExchangeType' in params ? params.ExchangeType : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.ExchangeCreator = 'ExchangeCreator' in params ? params.ExchangeCreator : null;
        this.Arguments = 'Arguments' in params ? params.Arguments : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * VPC access point information
 * @class
 */
class VpcEndpointInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet ID
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * vpc access point information.
         * @type {string || null}
         */
        this.VpcEndpoint = null;

        /**
         * vpc access point status.
OFF/ON/CREATING/DELETING
         * @type {string || null}
         */
        this.VpcDataStreamEndpointStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.VpcEndpoint = 'VpcEndpoint' in params ? params.VpcEndpoint : null;
        this.VpcDataStreamEndpointStatus = 'VpcDataStreamEndpointStatus' in params ? params.VpcDataStreamEndpointStatus : null;

    }
}

/**
 * DescribeRabbitMQServerlessExchanges request structure.
 * @class
 */
class DescribeRabbitMQServerlessExchangesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Paging offset.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Paginate limit.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Search keywords support fuzzy matching.
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Specifies the filter type for each selected element in the array of exchange types.
         * @type {Array.<string> || null}
         */
        this.ExchangeTypeFilters = null;

        /**
         * Specifies the exchange creation source. valid values: "system" (generated by the system), "user" (user-created).
         * @type {Array.<string> || null}
         */
        this.ExchangeCreatorFilters = null;

        /**
         * exchange name. specifies that it is used for exact matching.
         * @type {string || null}
         */
        this.ExchangeName = null;

        /**
         * Sorting field.
MessageRateInOut specifies the total production and consumption rate.
MessageRateIn specifies the production rate.
MessageRateOut specifies the consumption rate.
         * @type {string || null}
         */
        this.SortElement = null;

        /**
         * Sort order. valid values: ascend or descend.
         * @type {string || null}
         */
        this.SortOrder = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.ExchangeTypeFilters = 'ExchangeTypeFilters' in params ? params.ExchangeTypeFilters : null;
        this.ExchangeCreatorFilters = 'ExchangeCreatorFilters' in params ? params.ExchangeCreatorFilters : null;
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;
        this.SortElement = 'SortElement' in params ? params.SortElement : null;
        this.SortOrder = 'SortOrder' in params ? params.SortOrder : null;

    }
}

/**
 * Public network allowlist information.
 * @class
 */
class RabbitMQServerlessWhiteListInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Public network data stream allowlist.
         * @type {string || null}
         */
        this.PublicDataStreamWhiteList = null;

        /**
         * Public network data stream allowlist status.
         * @type {string || null}
         */
        this.PublicDataStreamWhiteListStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PublicDataStreamWhiteList = 'PublicDataStreamWhiteList' in params ? params.PublicDataStreamWhiteList : null;
        this.PublicDataStreamWhiteListStatus = 'PublicDataStreamWhiteListStatus' in params ? params.PublicDataStreamWhiteListStatus : null;

    }
}

/**
 * DeleteRabbitMQServerlessQueue response structure.
 * @class
 */
class DeleteRabbitMQServerlessQueueResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRabbitMQServerlessQueue response structure.
 * @class
 */
class CreateRabbitMQServerlessQueueResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeRabbitMQServerlessQueues request structure.
 * @class
 */
class DescribeRabbitMQServerlessQueuesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Pagination offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination limit
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Search keywords
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Specifies the queue type filter criteria. if it is left blank or set to "all", it indicates classic and quorum queues; if set to "classic", it filters classic queues; if set to "quorum", it filters quorum queues.
         * @type {string || null}
         */
        this.QueueType = null;

        /**
         * Sorting field.
ConsumerNumber: specifies the number of online consumers.
MessageHeapCount specifies the number of message backlogs.
MessageRateInOut specifies the total production and consumption rate.
MessageRateIn specifies the production rate.
MessageRateOut specifies the consumption rate.
         * @type {string || null}
         */
        this.SortElement = null;

        /**
         * Sort order. valid values: ascend or descend.
         * @type {string || null}
         */
        this.SortOrder = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.QueueType = 'QueueType' in params ? params.QueueType : null;
        this.SortElement = 'SortElement' in params ? params.SortElement : null;
        this.SortOrder = 'SortOrder' in params ? params.SortOrder : null;

    }
}

/**
 * DescribeRabbitMQServerlessBindings request structure.
 * @class
 */
class DescribeRabbitMQServerlessBindingsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Pagination Offset
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Pagination Limit
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Search keywords. do fuzzy search based on source exchange name, target resource name or binding key.
         * @type {string || null}
         */
        this.SearchWord = null;

        /**
         * Search and filter precisely according to the source Exchange.
         * @type {string || null}
         */
        this.SourceExchange = null;

        /**
         * Specifies precise search filter based on target QueueName. cannot set simultaneously with DestinationExchange filter.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * Precise search filter based on target Exchange. cannot set it simultaneously with QueueName filter.
         * @type {string || null}
         */
        this.DestinationExchange = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.SearchWord = 'SearchWord' in params ? params.SearchWord : null;
        this.SourceExchange = 'SourceExchange' in params ? params.SourceExchange : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.DestinationExchange = 'DestinationExchange' in params ? params.DestinationExchange : null;

    }
}

/**
 * DescribeRabbitMQServerlessPermission response structure.
 * @class
 */
class DescribeRabbitMQServerlessPermissionResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Return the number of permissions.
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of permission details.
         * @type {Array.<RabbitMQPermission> || null}
         */
        this.RabbitMQPermissionList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.RabbitMQPermissionList) {
            this.RabbitMQPermissionList = new Array();
            for (let z in params.RabbitMQPermissionList) {
                let obj = new RabbitMQPermission();
                obj.deserialize(params.RabbitMQPermissionList[z]);
                this.RabbitMQPermissionList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteRabbitMQServerlessBinding response structure.
 * @class
 */
class DeleteRabbitMQServerlessBindingResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Queue name.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * binding relationship Id.
         * @type {number || null}
         */
        this.BindingId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.BindingId = 'BindingId' in params ? params.BindingId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Virtual host quota.
 * @class
 */
class VirtualHostQuota extends  AbstractModel {
    constructor(){
        super();

        /**
         * Maximum number of virtual hosts.
         * @type {number || null}
         */
        this.MaxVirtualHost = null;

        /**
         * Number of already used virtual hosts.
         * @type {number || null}
         */
        this.UsedVirtualHost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MaxVirtualHost = 'MaxVirtualHost' in params ? params.MaxVirtualHost : null;
        this.UsedVirtualHost = 'UsedVirtualHost' in params ? params.UsedVirtualHost : null;

    }
}

/**
 * DeleteRabbitMQServerlessVirtualHost request structure.
 * @class
 */
class DeleteRabbitMQServerlessVirtualHostRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the vhost name.
         * @type {string || null}
         */
        this.VirtualHost = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;

    }
}

/**
 * ModifyRabbitMQServerlessExchange request structure.
 * @class
 */
class ModifyRabbitMQServerlessExchangeRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance id.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * exchange name.
         * @type {string || null}
         */
        this.ExchangeName = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * RabbitMQ exchange list member information.
 * @class
 */
class RabbitMQExchangeListInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * exchange name.
         * @type {string || null}
         */
        this.ExchangeName = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Specifies the exchange type. valid values: "fanout", "direct", "topic", "headers".
         * @type {string || null}
         */
        this.ExchangeType = null;

        /**
         * VHost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * exchange creator. valid values: `system` (generated by the system), `user` (user-created).
         * @type {string || null}
         */
        this.ExchangeCreator = null;

        /**
         * exchange creation time.
         * @type {string || null}
         */
        this.CreateTimeStamp = null;

        /**
         * exchange modification time.
         * @type {string || null}
         */
        this.ModTimeStamp = null;

        /**
         * Input message rate.
         * @type {number || null}
         */
        this.MessageRateIn = null;

        /**
         * Output message rate.
         * @type {number || null}
         */
        this.MessageRateOut = null;

        /**
         * Specifies whether it is a persistent exchange. true indicates persistent, and false indicates non-persistent.
         * @type {boolean || null}
         */
        this.Durable = null;

        /**
         * Specifies whether to automatically delete the switch. true indicates automatic deletion, and false indicates non-automatic deletion.
         * @type {boolean || null}
         */
        this.AutoDelete = null;

        /**
         * Whether it is an internal switch. valid values: true (indicating an internal switch).
         * @type {boolean || null}
         */
        this.Internal = null;

        /**
         * Specifies the ID of the associated instance to which the switch belongs.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The name of the effective policy.
         * @type {string || null}
         */
        this.Policy = null;

        /**
         * Additional parameters key-value objects.
         * @type {string || null}
         */
        this.Arguments = null;

        /**
         * Number of unscheduled delayed messages.
         * @type {number || null}
         */
        this.MessagesDelayed = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ExchangeName = 'ExchangeName' in params ? params.ExchangeName : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.ExchangeType = 'ExchangeType' in params ? params.ExchangeType : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.ExchangeCreator = 'ExchangeCreator' in params ? params.ExchangeCreator : null;
        this.CreateTimeStamp = 'CreateTimeStamp' in params ? params.CreateTimeStamp : null;
        this.ModTimeStamp = 'ModTimeStamp' in params ? params.ModTimeStamp : null;
        this.MessageRateIn = 'MessageRateIn' in params ? params.MessageRateIn : null;
        this.MessageRateOut = 'MessageRateOut' in params ? params.MessageRateOut : null;
        this.Durable = 'Durable' in params ? params.Durable : null;
        this.AutoDelete = 'AutoDelete' in params ? params.AutoDelete : null;
        this.Internal = 'Internal' in params ? params.Internal : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Policy = 'Policy' in params ? params.Policy : null;
        this.Arguments = 'Arguments' in params ? params.Arguments : null;
        this.MessagesDelayed = 'MessagesDelayed' in params ? params.MessagesDelayed : null;

    }
}

/**
 * ModifyRabbitMQServerlessQueue request structure.
 * @class
 */
class ModifyRabbitMQServerlessQueueRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Vhost parameter.
         * @type {string || null}
         */
        this.VirtualHost = null;

        /**
         * Queue name.
         * @type {string || null}
         */
        this.QueueName = null;

        /**
         * Newly modified remark.
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.VirtualHost = 'VirtualHost' in params ? params.VirtualHost : null;
        this.QueueName = 'QueueName' in params ? params.QueueName : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

module.exports = {
    DescribeRabbitMQServerlessConnectionResponse: DescribeRabbitMQServerlessConnectionResponse,
    DeleteRabbitMQServerlessPermissionResponse: DeleteRabbitMQServerlessPermissionResponse,
    RabbitMQBindingListInfo: RabbitMQBindingListInfo,
    ModifyRabbitMQServerlessUserResponse: ModifyRabbitMQServerlessUserResponse,
    CreateRabbitMQServerlessVirtualHostRequest: CreateRabbitMQServerlessVirtualHostRequest,
    DescribeRabbitMQServerlessUserResponse: DescribeRabbitMQServerlessUserResponse,
    ModifyRabbitMQServerlessExchangeResponse: ModifyRabbitMQServerlessExchangeResponse,
    DescribeRabbitMQServerlessConsumersResponse: DescribeRabbitMQServerlessConsumersResponse,
    DescribeRabbitMQServerlessQueueDetailResponse: DescribeRabbitMQServerlessQueueDetailResponse,
    DescribeRabbitMQServerlessVirtualHostRequest: DescribeRabbitMQServerlessVirtualHostRequest,
    ModifyRabbitMQServerlessVirtualHostRequest: ModifyRabbitMQServerlessVirtualHostRequest,
    CreateRabbitMQServerlessUserResponse: CreateRabbitMQServerlessUserResponse,
    DeleteRabbitMQServerlessQueueRequest: DeleteRabbitMQServerlessQueueRequest,
    ListRabbitMQServerlessInstancesResponse: ListRabbitMQServerlessInstancesResponse,
    CreateRabbitMQServerlessUserRequest: CreateRabbitMQServerlessUserRequest,
    ModifyRabbitMQServerlessUserRequest: ModifyRabbitMQServerlessUserRequest,
    DeleteRabbitMQServerlessPermissionRequest: DeleteRabbitMQServerlessPermissionRequest,
    CreateRabbitMQServerlessVirtualHostResponse: CreateRabbitMQServerlessVirtualHostResponse,
    ModifyRabbitMQServerlessInstanceRequest: ModifyRabbitMQServerlessInstanceRequest,
    RabbitMQServerlessInstance: RabbitMQServerlessInstance,
    DescribeRabbitMQServerlessExchangesResponse: DescribeRabbitMQServerlessExchangesResponse,
    DeleteRabbitMQServerlessVirtualHostResponse: DeleteRabbitMQServerlessVirtualHostResponse,
    RabbitMQUser: RabbitMQUser,
    RabbitMQServerlessAccessInfo: RabbitMQServerlessAccessInfo,
    RabbitMQPermission: RabbitMQPermission,
    QueueQuota: QueueQuota,
    DescribeRabbitMQServerlessVirtualHostResponse: DescribeRabbitMQServerlessVirtualHostResponse,
    DescribeRabbitMQServerlessQueuesResponse: DescribeRabbitMQServerlessQueuesResponse,
    ModifyRabbitMQServerlessInstanceResponse: ModifyRabbitMQServerlessInstanceResponse,
    ModifyRabbitMQServerlessVirtualHostResponse: ModifyRabbitMQServerlessVirtualHostResponse,
    CreateRabbitMQServerlessExchangeRequest: CreateRabbitMQServerlessExchangeRequest,
    DescribeRabbitMQServerlessConnectionRequest: DescribeRabbitMQServerlessConnectionRequest,
    DescribeRabbitMQServerlessUserRequest: DescribeRabbitMQServerlessUserRequest,
    DeleteRabbitMQServerlessUserResponse: DeleteRabbitMQServerlessUserResponse,
    RabbitMQClusterInfo: RabbitMQClusterInfo,
    DescribeRabbitMQServerlessBindingsResponse: DescribeRabbitMQServerlessBindingsResponse,
    CreateRabbitMQServerlessExchangeResponse: CreateRabbitMQServerlessExchangeResponse,
    DeleteRabbitMQServerlessExchangeResponse: DeleteRabbitMQServerlessExchangeResponse,
    DeleteRabbitMQServerlessUserRequest: DeleteRabbitMQServerlessUserRequest,
    DescribeRabbitMQServerlessConsumersRequest: DescribeRabbitMQServerlessConsumersRequest,
    RabbitMQConsumersListInfo: RabbitMQConsumersListInfo,
    CreateRabbitMQServerlessBindingResponse: CreateRabbitMQServerlessBindingResponse,
    UserQuota: UserQuota,
    ModifyRabbitMQServerlessPermissionRequest: ModifyRabbitMQServerlessPermissionRequest,
    CreateRabbitMQServerlessQueueRequest: CreateRabbitMQServerlessQueueRequest,
    DeleteRabbitMQServerlessBindingRequest: DeleteRabbitMQServerlessBindingRequest,
    RabbitMQVirtualHostStatistics: RabbitMQVirtualHostStatistics,
    DescribeRabbitMQServerlessQueueDetailRequest: DescribeRabbitMQServerlessQueueDetailRequest,
    RabbitMQQueueListInfo: RabbitMQQueueListInfo,
    Filter: Filter,
    ModifyRabbitMQServerlessPermissionResponse: ModifyRabbitMQServerlessPermissionResponse,
    DeleteRabbitMQServerlessExchangeRequest: DeleteRabbitMQServerlessExchangeRequest,
    DescribeRabbitMQServerlessExchangeDetailRequest: DescribeRabbitMQServerlessExchangeDetailRequest,
    RabbitMQClusterSpecInfo: RabbitMQClusterSpecInfo,
    ModifyRabbitMQServerlessQueueResponse: ModifyRabbitMQServerlessQueueResponse,
    CreateRabbitMQServerlessBindingRequest: CreateRabbitMQServerlessBindingRequest,
    RabbitMQServerlessEndpoint: RabbitMQServerlessEndpoint,
    RabbitMQVirtualHostInfo: RabbitMQVirtualHostInfo,
    ExchangeQuota: ExchangeQuota,
    DescribeRabbitMQServerlessInstanceResponse: DescribeRabbitMQServerlessInstanceResponse,
    ListRabbitMQServerlessInstancesRequest: ListRabbitMQServerlessInstancesRequest,
    RabbitMQConnection: RabbitMQConnection,
    RabbitMQQueueListConsumerDetailInfo: RabbitMQQueueListConsumerDetailInfo,
    DescribeRabbitMQServerlessInstanceRequest: DescribeRabbitMQServerlessInstanceRequest,
    DescribeRabbitMQServerlessPermissionRequest: DescribeRabbitMQServerlessPermissionRequest,
    DescribeRabbitMQServerlessExchangeDetailResponse: DescribeRabbitMQServerlessExchangeDetailResponse,
    VpcEndpointInfo: VpcEndpointInfo,
    DescribeRabbitMQServerlessExchangesRequest: DescribeRabbitMQServerlessExchangesRequest,
    RabbitMQServerlessWhiteListInfo: RabbitMQServerlessWhiteListInfo,
    DeleteRabbitMQServerlessQueueResponse: DeleteRabbitMQServerlessQueueResponse,
    CreateRabbitMQServerlessQueueResponse: CreateRabbitMQServerlessQueueResponse,
    DescribeRabbitMQServerlessQueuesRequest: DescribeRabbitMQServerlessQueuesRequest,
    DescribeRabbitMQServerlessBindingsRequest: DescribeRabbitMQServerlessBindingsRequest,
    DescribeRabbitMQServerlessPermissionResponse: DescribeRabbitMQServerlessPermissionResponse,
    DeleteRabbitMQServerlessBindingResponse: DeleteRabbitMQServerlessBindingResponse,
    VirtualHostQuota: VirtualHostQuota,
    DeleteRabbitMQServerlessVirtualHostRequest: DeleteRabbitMQServerlessVirtualHostRequest,
    ModifyRabbitMQServerlessExchangeRequest: ModifyRabbitMQServerlessExchangeRequest,
    RabbitMQExchangeListInfo: RabbitMQExchangeListInfo,
    ModifyRabbitMQServerlessQueueRequest: ModifyRabbitMQServerlessQueueRequest,

}
